import * as http from '../util/http';
import * as ajax from '../util/ajax';
import {bed} from '../util/bed';
import cache from '../util/cache';
import {getUser} from '../login';
import {get as _get} from 'lodash';

export const nullKey = '-';
export const dataKey = '_';

/**
 * 通用的数据查询方法，包括权限控制，缓存和存储路径一致化
 * @param key store路径前缀（完整的路径会添加region和hospital）
 * @param uri ajax请求路径
 * @param q ajax查询参数
 * @param action redux操作
 * @param module 模块名称（如为空则不缓存）
 * @return {function(*, *)}
 */
export function get(key, uri, q, action, module) {
    return (dispatch, getState) => {
        let user = _get(getState(), 'app.user');
        if (!user) {
            // 从缓存获取（F5刷新时）
            user = getUser();
        }
        if (!user) {
            // 尚未登录，丢弃请求
            return Promise.resolve();
        }
        if (!q) q = {};
        let a = bed(ajax.get(http.makeUrl(uri, q)), action, {key});
        if (module) {
            a = cache(`${module}.${key}`, a);
        }
        dispatch(a);
    };
}
